/**
 * 1. for of
 */

/**
 * 2. 展开运算符
 */
const iterableObj = {
  names: ['jack', 'josh', 'mike'],
  [Symbol.iterator]: function () {
    let index = 0
    return {
      next: () => {
        if (index < this.names.length) {
          return { done: false, value: this.names[index++] }
        } else {
          return { done: true, value: undefined }
        }
      },
    }
  },
}
const names = [...iterableObj]
console.log(names)

//注意：构造对象时可以使用展开运算符是ES9的新增特性，内部实现并不是使用可迭代对象的特性

/**
 * 3. 解构语法
 */
const [name1, name2] = iterableObj
console.log(name1)
console.log(name2)
//注意：对象解构也是ES9的新增特性，内部实现并不是使用可迭代对象的特性

/**
 * 4. 创建一些其他对象
 */
const set1 = new Set(iterableObj)
console.log(set1)

/**
 * 5. Promise.all
 */
Promise.all(iterableObj).then((res) => {
  console.log(res)
})
